package main

import (
	"fmt"
)

//type的作用：
//1.定义函数类型
//2.为已存在的数据类型起别名
type Int int

//func (方法接收者)方法名(参数)返回值
func (a Int) add(b Int) Int {
	return a + b
}

//为已存在的结构体类型起别名
type stu struct {
	name string
	age  int
	sex  string
}

func (a stu) printInfo() {
	fmt.Println(a)
}

func (a *stu) editInfo(name string, age int, sex string) {
	//(*a).name=name
	//结构体指针可以直接操作结构体成员
	a.name = name
	a.age = age
	a.sex = sex
	//fmt.Println(a)
}

func main() {
	a := Int(10)
	b := Int(20)
	res := a.add(b)
	fmt.Println(res)

	s := stu{"zs", 18, "男"}
	s.printInfo()

	//s.editInfo("ls",19,"女")   //结构体变量能直接使用结构体指针的方法
	(&s).editInfo("ls", 19, "女")
	fmt.Println(s)

	var s1 *stu
	s1 = new(stu)
	s1.editInfo("ls", 24, "女")
	s1.printInfo()
}
